Moin moin, Dixels und Trotz, dann fangen wir an. Wer auf dem Sommerfest ist, der hat was
Besseres vor. Letzte Woche haben wir uns angeguckt, das Ganze mit den
Brandsprediction Geschichten. Da haben wir uns immer gemerkt zu jeder Sprunginstruktion,
wie war denn das, sind wir dann in letzter Zeit gesprungen, ja oder nein.
Da haben wir uns angeguckt, wie man sowas bauen kann. Eine Frage dazu habe ich
erstmal noch, passt auch zu dem, was du gerade gefragt hast.
Wie ist denn das? Irgendwann haben die Leute doch in alten Zeiten keine
Brandsprediction gehabt und sie hatten stattdessen ein Delay-Slot.
Eigentlich hatten sie mehr, aber sie haben ja versucht, das irgendwie so hinzufummeln,
dass sie mit einem Delay-Slot ausgekommen sind, weil den kann man ja noch so leidlich füllen.
Typische Beispiele, Spark, MIPS. Jetzt haben wir uns ja angeguckt,
die Pipelines sind länger und länger und länger geworden, weil immer schneller,
immer schneller. Jetzt können die das eigentlich mit einem Delay-Slot gar
nicht mehr hinkriegen, weil die Fetch-Unit, die braucht schon mal zwei, drei, vier Takte.
Bis sie überhaupt das Datum aus dem Cache hat und damit hat sich das Problem
eigentlich schon erledigt, weil sie hätte schon vorher sagen müssen, springen ja oder nein.
Wie kann man dann jetzt nachträglich dieses Verhalten wieder herkriegen?
Also was wir jetzt brauchen ist sozusagen Brandsprediction, die aber immer
ein hinterher hinkt. Wenn man jetzt ein Delay-Slot haben will, Spark hat das irgendwann mal so
eingeführt, egal was sie jetzt machen, es muss ein Delay-Slot sein, sonst sind sie nicht
mehr kompatibel. Das ist natürlich jetzt ein bisschen eklig. Wir haben immer gesagt
Brandsprediction, dann haben wir keine Delay-Slots oder wir haben so viele Delay-Slots,
wie halt die Pipeline definiert. Wie bauen wir denn jetzt eine CPU, eine Pipeline,
mit einem definiert, einem Delay-Slot?
Ja, wie mache ich denn das? Da muss ich jetzt ja mal wieder einen Haufen.
Dann muss ich ja eigentlich diesen Sprung vorher sagen, noch ein bisschen halten,
dass man gegen das Sackmantel zu sagen, dieses Hit, das da rausfällt, das könnte man ja
noch in dem Register sozusagen halten und auf die Adresse, die da eingeht und rausgeht
und halt einfach, dass es noch einen Tag noch mal gehalten wird und dann erst auf den Program-Counter
starten wird. Da wird die Pipeline schon ausgeschlichen.
Dann kann man genau SUV in der Bottom Everyone Klammer았어요.
Wenn du direkt vom Sprung es noch gut hast, dann musst du sicher die immer auskühlen, weil die ja nicht weggeworfen wird.
Wenn du reinmust gekriegt hast, dann wird die auch auskühlen.
Aber dann spinnt man weg.
Einfachste Lösung. Wir haben neulich unseren Program-Counter gehabt und aus dem Program-Counter haben wir uns den Traction-Pointer geholt
und den gleich in den Cache reingesteckt und geguckt, ob wir was passendes haben.
Den Instruction-Pointer schieben wir aber auch durch die Pipeline.
Man könnte ihn einfach einen Tag später abgreifen.
Das ist die einfachste Variante und die geht auch für Alar-Ampfälle.
Man hat eine CPU mit genau zwei Delay-Slots, dann schiebt man den Abgriff von dem Program-Counter um zwei Pipeline-Stufen weiter nach hinten.
Also gehen tut es, aber das ist im Nachhinein gesehen irgendwie eine Krücke.
Eine ganz andere Variante, die ich euch noch vorstellen will, ist die sogenannte Global History.
Global im Sinne von ich merke mir nicht mehr Prediction Bits.
Bei der Instruktion war das sowieso und bei der Instruktion war es ganz anders.
Sondern ich merke mir immer, ich bin gesprungen, nicht gesprungen, gesprungen, nicht gesprungen, gesprungen, nicht gesprungen, gesprungen, nicht gesprungen.
Am Beispiel hier, die Schleife wird ganz häufig ausgeführt, da springt er immer.
Und das Finden hier, das schlägt meistens fehl, also an der Stelle springt er nicht.
Also springt nach oben, springt nicht, springt nach oben, springt nicht, springt nach oben, springt nicht.
Und wenn ich mir einfach diese springe, springt nicht, unabhängig davon, merke wo ich gesprungen oder nicht gesprungen bin,
habe ich einfach so eine Kette von Nullen und Einsen.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:31:25 Min
Aufnahmedatum
2013-06-27
Hochgeladen am
2019-04-06 08:39:04
Sprache
de-DE